{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "<h1> PTRAIL Filters </h1>\n",
    "<p>\n",
    "    This Jupyter Notebook contains several examples of filtering\n",
    "    functions like filtering the data based on time, date,\n",
    "    proximity to a point etc.\n",
    "    <br>\n",
    "    <br>\n",
    "    Apart from filtering, this Jupyter\n",
    "    Notebook also has examples of outlier detection and removal\n",
    "    from the dataset.\n",
    "</p>\n",
    "\n",
    "<hr>\n",
    "\n",
    "<p align='justify'>\n",
    "    This Jupyter Notebook contains Dataset filtering examples and\n",
    "    the following datasets are used to demonstrate them:\n",
    "    <ul>\n",
    "        <li> <a href=\"https://github.com/YakshHaranwala/PTRAIL/blob/main/examples/data/geolife_sample.csv\"> Geolife Sample </a> </li>\n",
    "        <li> <a href=\"https://github.com/YakshHaranwala/PTRAIL/blob/main/examples/data/gulls.csv\"> Seagulls Dataset </a> </li>\n",
    "        <li> <a href=\"https://github.com/YakshHaranwala/PTRAIL/blob/main/examples/data/atlantic.csv\"> Hurricane Dataset </a> </li>\n",
    "    </ul>\n",
    "</p>\n",
    "\n",
    "<hr>\n",
    "<p align='justify'>\n",
    "Note: Viewing this notebook in GitHub will not render JavaScript\n",
    "elements. Hence, for a better experience, click the link below\n",
    "to open the Jupyter notebook in NB viewer.\n",
    "\n",
    "<span> &#8618; </span>\n",
    "<a href=\"https://nbviewer.jupyter.org/github/YakshHaranwala/PTRAIL/blob/main/examples/3.%20filter_examples.ipynb\" target='_blank'> Click Here </a>\n",
    "</p>"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "from ptrail.core.TrajectoryDF import PTRAILDataFrame\n",
    "from ptrail.features.kinematic_features import KinematicFeatures as spatial\n",
    "from ptrail.features.temporal_features import TemporalFeatures as temporal\n",
    "from ptrail.utilities.conversions import Conversions as con\n",
    "from ptrail.preprocessing.filters import Filters as filters\n",
    "import ptrail.utilities.constants as const\n",
    "\n",
    "import pandas as pd\n",
    "import time\n",
    "np.seterr(invalid='ignore')\n",
    "start = time.time()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 506 ms, sys: 28.1 ms, total: 534 ms\n",
      "Wall time: 533 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": "                                   lat         lon\ntraj_id DateTime                                  \n1       2008-10-23 05:53:11  39.984224  116.319402\n        2008-10-23 05:53:16  39.984211  116.319389\n        2008-10-23 05:53:21  39.984217  116.319422\n        2008-10-23 05:53:23  39.984710  116.319865\n        2008-10-23 05:53:28  39.984674  116.319810",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th></th>\n      <th>lat</th>\n      <th>lon</th>\n    </tr>\n    <tr>\n      <th>traj_id</th>\n      <th>DateTime</th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th rowspan=\"5\" valign=\"top\">1</th>\n      <th>2008-10-23 05:53:11</th>\n      <td>39.984224</td>\n      <td>116.319402</td>\n    </tr>\n    <tr>\n      <th>2008-10-23 05:53:16</th>\n      <td>39.984211</td>\n      <td>116.319389</td>\n    </tr>\n    <tr>\n      <th>2008-10-23 05:53:21</th>\n      <td>39.984217</td>\n      <td>116.319422</td>\n    </tr>\n    <tr>\n      <th>2008-10-23 05:53:23</th>\n      <td>39.984710</td>\n      <td>116.319865</td>\n    </tr>\n    <tr>\n      <th>2008-10-23 05:53:28</th>\n      <td>39.984674</td>\n      <td>116.319810</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "\"\"\"\n",
    "    First of all, lets import all the datasets one by one\n",
    "    and check out a few of their points.\n",
    "\"\"\"\n",
    "# Reading the geolife dataset and converting to PTRAILDataFrame.\n",
    "# Also, lets, print the first 5 points of the datset to\n",
    "# see how the dataframe looks.\n",
    "geolife = pd.read_csv('./data/geolife_sample.csv')\n",
    "geolife = PTRAILDataFrame(geolife,'lat','lon','datetime','id')\n",
    "geolife.head()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 269 ms, sys: 12.1 ms, total: 282 ms\n",
      "Wall time: 280 ms\n"
     ]
    },
    {
     "data": {
      "text/plain": "                               event-id  visible       lon       lat  \\\ntraj_id DateTime                                                       \n91732   2009-05-27 14:00:00  1082620685     True  24.58617  61.24783   \n        2009-05-27 20:00:00  1082620686     True  24.58217  61.23267   \n        2009-05-28 05:00:00  1082620687     True  24.53133  61.18833   \n        2009-05-28 08:00:00  1082620688     True  24.58200  61.23283   \n        2009-05-28 14:00:00  1082620689     True  24.58250  61.23267   \n\n                            sensor-type individual-taxon-canonical-name  \\\ntraj_id DateTime                                                          \n91732   2009-05-27 14:00:00         gps                    Larus fuscus   \n        2009-05-27 20:00:00         gps                    Larus fuscus   \n        2009-05-28 05:00:00         gps                    Larus fuscus   \n        2009-05-28 08:00:00         gps                    Larus fuscus   \n        2009-05-28 14:00:00         gps                    Larus fuscus   \n\n                            individual-local-identifier  \\\ntraj_id DateTime                                          \n91732   2009-05-27 14:00:00                      91732A   \n        2009-05-27 20:00:00                      91732A   \n        2009-05-28 05:00:00                      91732A   \n        2009-05-28 08:00:00                      91732A   \n        2009-05-28 14:00:00                      91732A   \n\n                                                                    study-name  \ntraj_id DateTime                                                                \n91732   2009-05-27 14:00:00  Navigation experiments in lesser black-backed ...  \n        2009-05-27 20:00:00  Navigation experiments in lesser black-backed ...  \n        2009-05-28 05:00:00  Navigation experiments in lesser black-backed ...  \n        2009-05-28 08:00:00  Navigation experiments in lesser black-backed ...  \n        2009-05-28 14:00:00  Navigation experiments in lesser black-backed ...  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th></th>\n      <th>event-id</th>\n      <th>visible</th>\n      <th>lon</th>\n      <th>lat</th>\n      <th>sensor-type</th>\n      <th>individual-taxon-canonical-name</th>\n      <th>individual-local-identifier</th>\n      <th>study-name</th>\n    </tr>\n    <tr>\n      <th>traj_id</th>\n      <th>DateTime</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th rowspan=\"5\" valign=\"top\">91732</th>\n      <th>2009-05-27 14:00:00</th>\n      <td>1082620685</td>\n      <td>True</td>\n      <td>24.58617</td>\n      <td>61.24783</td>\n      <td>gps</td>\n      <td>Larus fuscus</td>\n      <td>91732A</td>\n      <td>Navigation experiments in lesser black-backed ...</td>\n    </tr>\n    <tr>\n      <th>2009-05-27 20:00:00</th>\n      <td>1082620686</td>\n      <td>True</td>\n      <td>24.58217</td>\n      <td>61.23267</td>\n      <td>gps</td>\n      <td>Larus fuscus</td>\n      <td>91732A</td>\n      <td>Navigation experiments in lesser black-backed ...</td>\n    </tr>\n    <tr>\n      <th>2009-05-28 05:00:00</th>\n      <td>1082620687</td>\n      <td>True</td>\n      <td>24.53133</td>\n      <td>61.18833</td>\n      <td>gps</td>\n      <td>Larus fuscus</td>\n      <td>91732A</td>\n      <td>Navigation experiments in lesser black-backed ...</td>\n    </tr>\n    <tr>\n      <th>2009-05-28 08:00:00</th>\n      <td>1082620688</td>\n      <td>True</td>\n      <td>24.58200</td>\n      <td>61.23283</td>\n      <td>gps</td>\n      <td>Larus fuscus</td>\n      <td>91732A</td>\n      <td>Navigation experiments in lesser black-backed ...</td>\n    </tr>\n    <tr>\n      <th>2009-05-28 14:00:00</th>\n      <td>1082620689</td>\n      <td>True</td>\n      <td>24.58250</td>\n      <td>61.23267</td>\n      <td>gps</td>\n      <td>Larus fuscus</td>\n      <td>91732A</td>\n      <td>Navigation experiments in lesser black-backed ...</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "\n",
    "# Reading the gulls dataset and converting to PTRAILDataFrame.\n",
    "# Also, lets, print the first 5 points of the datset to\n",
    "# see how the dataframe looks.\n",
    "gulls = pd.read_csv('./data/gulls.csv')\n",
    "gulls = PTRAILDataFrame(gulls,\n",
    "                        latitude='location-lat',\n",
    "                        longitude='location-long',\n",
    "                        datetime='timestamp',\n",
    "                        traj_id='tag-local-identifier',\n",
    "                        rest_of_columns=[])\n",
    "gulls.head()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 9 s, sys: 104 ms, total: 9.1 s\n",
      "Wall time: 9.1 s\n"
     ]
    },
    {
     "data": {
      "text/plain": "                                             Name        Date  Time Event  \\\ntraj_id  DateTime                                                           \nAL011851 1851-06-25 00:00:00              UNNAMED  1851-06-25     0         \n         1851-06-25 06:00:00              UNNAMED  1851-06-25   600         \n         1851-06-25 12:00:00              UNNAMED  1851-06-25  1200         \n         1851-06-25 18:00:00              UNNAMED  1851-06-25  1800         \n         1851-06-25 21:00:00              UNNAMED  1851-06-25  2100     L   \n\n                             Status   lat   lon  Maximum Wind  \\\ntraj_id  DateTime                                               \nAL011851 1851-06-25 00:00:00     HU  28.0 -94.8            80   \n         1851-06-25 06:00:00     HU  28.0 -95.4            80   \n         1851-06-25 12:00:00     HU  28.0 -96.0            80   \n         1851-06-25 18:00:00     HU  28.1 -96.5            80   \n         1851-06-25 21:00:00     HU  28.2 -96.8            80   \n\n                              Minimum Pressure  Low Wind NE  ...  Low Wind SW  \\\ntraj_id  DateTime                                            ...                \nAL011851 1851-06-25 00:00:00              -999         -999  ...         -999   \n         1851-06-25 06:00:00              -999         -999  ...         -999   \n         1851-06-25 12:00:00              -999         -999  ...         -999   \n         1851-06-25 18:00:00              -999         -999  ...         -999   \n         1851-06-25 21:00:00              -999         -999  ...         -999   \n\n                              Low Wind NW  Moderate Wind NE  Moderate Wind SE  \\\ntraj_id  DateTime                                                               \nAL011851 1851-06-25 00:00:00         -999              -999              -999   \n         1851-06-25 06:00:00         -999              -999              -999   \n         1851-06-25 12:00:00         -999              -999              -999   \n         1851-06-25 18:00:00         -999              -999              -999   \n         1851-06-25 21:00:00         -999              -999              -999   \n\n                              Moderate Wind SW  Moderate Wind NW  \\\ntraj_id  DateTime                                                  \nAL011851 1851-06-25 00:00:00              -999              -999   \n         1851-06-25 06:00:00              -999              -999   \n         1851-06-25 12:00:00              -999              -999   \n         1851-06-25 18:00:00              -999              -999   \n         1851-06-25 21:00:00              -999              -999   \n\n                              High Wind NE  High Wind SE  High Wind SW  \\\ntraj_id  DateTime                                                        \nAL011851 1851-06-25 00:00:00          -999          -999          -999   \n         1851-06-25 06:00:00          -999          -999          -999   \n         1851-06-25 12:00:00          -999          -999          -999   \n         1851-06-25 18:00:00          -999          -999          -999   \n         1851-06-25 21:00:00          -999          -999          -999   \n\n                              High Wind NW  \ntraj_id  DateTime                           \nAL011851 1851-06-25 00:00:00          -999  \n         1851-06-25 06:00:00          -999  \n         1851-06-25 12:00:00          -999  \n         1851-06-25 18:00:00          -999  \n         1851-06-25 21:00:00          -999  \n\n[5 rows x 21 columns]",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th></th>\n      <th>Name</th>\n      <th>Date</th>\n      <th>Time</th>\n      <th>Event</th>\n      <th>Status</th>\n      <th>lat</th>\n      <th>lon</th>\n      <th>Maximum Wind</th>\n      <th>Minimum Pressure</th>\n      <th>Low Wind NE</th>\n      <th>...</th>\n      <th>Low Wind SW</th>\n      <th>Low Wind NW</th>\n      <th>Moderate Wind NE</th>\n      <th>Moderate Wind SE</th>\n      <th>Moderate Wind SW</th>\n      <th>Moderate Wind NW</th>\n      <th>High Wind NE</th>\n      <th>High Wind SE</th>\n      <th>High Wind SW</th>\n      <th>High Wind NW</th>\n    </tr>\n    <tr>\n      <th>traj_id</th>\n      <th>DateTime</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th rowspan=\"5\" valign=\"top\">AL011851</th>\n      <th>1851-06-25 00:00:00</th>\n      <td>UNNAMED</td>\n      <td>1851-06-25</td>\n      <td>0</td>\n      <td></td>\n      <td>HU</td>\n      <td>28.0</td>\n      <td>-94.8</td>\n      <td>80</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>...</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n    </tr>\n    <tr>\n      <th>1851-06-25 06:00:00</th>\n      <td>UNNAMED</td>\n      <td>1851-06-25</td>\n      <td>600</td>\n      <td></td>\n      <td>HU</td>\n      <td>28.0</td>\n      <td>-95.4</td>\n      <td>80</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>...</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n    </tr>\n    <tr>\n      <th>1851-06-25 12:00:00</th>\n      <td>UNNAMED</td>\n      <td>1851-06-25</td>\n      <td>1200</td>\n      <td></td>\n      <td>HU</td>\n      <td>28.0</td>\n      <td>-96.0</td>\n      <td>80</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>...</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n    </tr>\n    <tr>\n      <th>1851-06-25 18:00:00</th>\n      <td>UNNAMED</td>\n      <td>1851-06-25</td>\n      <td>1800</td>\n      <td></td>\n      <td>HU</td>\n      <td>28.1</td>\n      <td>-96.5</td>\n      <td>80</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>...</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n    </tr>\n    <tr>\n      <th>1851-06-25 21:00:00</th>\n      <td>UNNAMED</td>\n      <td>1851-06-25</td>\n      <td>2100</td>\n      <td>L</td>\n      <td>HU</td>\n      <td>28.2</td>\n      <td>-96.8</td>\n      <td>80</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>...</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n      <td>-999</td>\n    </tr>\n  </tbody>\n</table>\n<p>5 rows × 21 columns</p>\n</div>"
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "'''\n",
    "    1. Reading the atlantic dataset, cleaning it up and then\n",
    "       converting it to PTRAILDataFrame.\n",
    "    2. It is to be noted that apart from reading the dataset,\n",
    "       before converting to PTRAILDataFrame, the dataframe needs\n",
    "       some cleanup as the Time format provided in the dataframe\n",
    "       needs to be first converted into a library supported time\n",
    "       format. Also, the format of the coordinates need to be\n",
    "       converted to library supported format before converting'\n",
    "       it to PTRAILDataFrame.\n",
    "    3. Also, lets, print the first 5 points of the dataset to\n",
    "      see how the dataframe looks.\n",
    "'''\n",
    "atlantic = pd.read_csv('./data/atlantic.csv')\n",
    "atlantic = con.convert_directions_to_degree_lat_lon(atlantic, 'Latitude',\"Longitude\")\n",
    "def convert_to_datetime(row):\n",
    "        this_date = '{}-{}-{}'.format(str(row['Date'])[0:4], str(row['Date'])[4:6], str(row['Date'])[6:])\n",
    "        this_time = '{:02d}:{:02d}:00'.format(int(row['Time']/100), int(str(row['Time'])[-2:]))\n",
    "        return '{} {}'.format(this_date, this_time)\n",
    "atlantic['DateTime'] = atlantic.apply(convert_to_datetime, axis=1)\n",
    "atlantic = PTRAILDataFrame(atlantic,\n",
    "                          latitude='Latitude',\n",
    "                          longitude='Longitude',\n",
    "                          datetime='DateTime',\n",
    "                          traj_id='ID',\n",
    "                          rest_of_columns=[])\n",
    "atlantic = temporal.create_date_column(atlantic)\n",
    "atlantic.head()\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "(38.100678394081264, 114.84275815636957, 39.89932160591873, 117.15724184363044)"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# %%time\n",
    "\n",
    "#Now, let create a bounding box of 100 km radius from the\n",
    "#coordinates 39, 116.\n",
    "\n",
    "bbox = filters.get_bounding_box_by_radius(39, 116, 100000)\n",
    "bbox"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length of atlantic: 49105\n",
      "Length of small: 46909\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the trajectory based on date. We will\n",
    "# try all the possible combinations for the filtering.\n",
    "\n",
    "small = filters.filter_by_date(atlantic, start_date='1851-06-25',end_date='2011-01-01')\n",
    "print(f\"Length of atlantic: {len(atlantic)}\")\n",
    "print(f\"Length of small: {len(small)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length of atlantic: 49105\n",
      "Length of tiny: 46536\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the trajectory based on datetime. We will\n",
    "# try all the possible cases one by one.\n",
    "\n",
    "tiny = filters.filter_by_datetime(atlantic, start_dateTime='1859-09-21 23:00:00' ,\n",
    "                                  end_dateTime='2011-09-21 23:00:00')\n",
    "print(f\"Length of atlantic: {len(atlantic)}\")\n",
    "print(f\"Length of tiny: {len(tiny)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length of atlantic: 49105\n",
      "Length of speed_filt_df: 41358\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the dataframe based on maximum speed.\n",
    "\n",
    "atlantic = spatial.create_speed_column(atlantic)\n",
    "max_speed_filt_df = filters.filter_by_max_speed(atlantic, 10)\n",
    "print(f\"Length of atlantic: {len(atlantic)}\")\n",
    "print(f\"Length of speed_filt_df: {len(max_speed_filt_df)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Length of speed_filt_df: 41358\n",
      "Length of min_speed_filt: 20485\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the dataframe based on minimum speed.\n",
    "\n",
    "min_speed_filt = filters.filter_by_min_speed(max_speed_filt_df, 5)\n",
    "print(f\"Length of speed_filt_df: {len(max_speed_filt_df)}\")\n",
    "print(f\"Length of min_speed_filt: {len(min_speed_filt)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of atlantic: 49105\n",
      "length of min_distance_filt: 20584\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the dataframe based on minimum distance\n",
    "# between consecutive points.\n",
    "\n",
    "min_distance_filt = filters.filter_by_min_consecutive_distance(atlantic,\n",
    "                                                               125000)\n",
    "print(f\"length of atlantic: {len(atlantic)}\")\n",
    "print(f\"length of min_distance_filt: {len(min_distance_filt)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of min_distance_filt: 20584\n",
      "length of max_distance_filt: 20412\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the dataframe based on maximum distance\n",
    "# between consecutive points.\n",
    "\n",
    "max_distance_filt = filters.filter_by_max_consecutive_distance(min_distance_filt,\n",
    "                                                               500000)\n",
    "print(f\"length of min_distance_filt: {len(min_distance_filt)}\")\n",
    "print(f\"length of max_distance_filt: {len(max_distance_filt)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of atlantic: 49105\n",
      "length of max_dist_speed_filt: 20873\n"
     ]
    }
   ],
   "source": [
    "# Now, lets filter the data based on maximum speed as\n",
    "# well as maximum distance between 2 consecutive points.\n",
    "\n",
    "max_dist_speed_filt = \\\n",
    "    filters.filter_by_max_distance_and_speed(atlantic, max_distance=300000, max_speed=5)\n",
    "print(f\"length of atlantic: {len(atlantic)}\")\n",
    "print(f\"length of max_dist_speed_filt: {len(max_dist_speed_filt)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of atlantic: 49105\n",
      "length of max_dist_speed_filt: 5773\n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Now, lets filter the data based on minimum speed as\n",
    "# well as minimum distance between 2 consecutive points.\n",
    "\n",
    "min_dist_speed_filt = \\\n",
    "    filters.filter_by_min_distance_and_speed(atlantic, min_distance=150000, min_speed=10)\n",
    "print(f\"length of atlantic: {len(atlantic)}\")\n",
    "print(f\"length of max_dist_speed_filt: {len(min_dist_speed_filt)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of geolife: 217653\n",
      "length of outlier_df: 212124\n",
      "Number of outliers: 5529\n"
     ]
    }
   ],
   "source": [
    "# Now, lets remove the outliers based on the\n",
    "# distance between 2 consecutive points.\n",
    "\n",
    "geolife = spatial.create_speed_column(geolife)\n",
    "outlier_df = filters.filter_outliers_by_consecutive_distance(geolife)\n",
    "print(f\"length of geolife: {len(geolife)}\")\n",
    "print(f\"length of outlier_df: {len(outlier_df)}\")\n",
    "print(f\"Number of outliers: {len(geolife) - len(outlier_df)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "length of geolife: 217653\n",
      "length of outlier_df: 195283\n",
      "Number of outliers: 22370\n"
     ]
    }
   ],
   "source": [
    "odf_two = filters.filter_outliers_by_consecutive_speed(geolife)\n",
    "print(f\"length of geolife: {len(geolife)}\")\n",
    "print(f\"length of outlier_df: {len(odf_two)}\")\n",
    "print(f\"Number of outliers: {len(geolife) - len(odf_two)}\")"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of unique Traj IDs in atlantic: 1814\n",
      "Number of unique Traj IDs left after filter: 1772\n"
     ]
    }
   ],
   "source": [
    "# Now, lets remove the trajectories that have\n",
    "# fewer than 5 points.\n",
    "\n",
    "short_traj_gone = filters.remove_trajectories_with_less_points(atlantic, 5)\n",
    "print(f\"Number of unique Traj IDs in atlantic: {atlantic.traj_id.nunique()}\")\n",
    "print(f\"Number of unique Traj IDs left after filter: {short_traj_gone.traj_id.nunique()}\")\n"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "    Outlier Detection:\n",
    "        First we are taking a snippet of the gulls dataframe and then manipulating\n",
    "        some of its value at different points so that they become outliers. This\n",
    "        is followed by running the Hampel filter for outlier detection. The plot\n",
    "        before the hampel filter and after it shows that the outliers have been removed.\n",
    "\n",
    "\"\"\"\n",
    "small_gulls = gulls.reset_index().loc[gulls.reset_index()[const.TRAJECTORY_ID] == '91732'][[const.TRAJECTORY_ID, const.DateTime, const.LAT, const.LONG]]\n",
    "\n",
    "# Changing the values to make them the outliers\n",
    "df = small_gulls.copy()\n",
    "df.iloc[0, df.columns.get_loc(const.LAT)]= 80\n",
    "df.iloc[5, df.columns.get_loc(const.LAT)]= 70\n",
    "df.iloc[69, df.columns.get_loc(const.LAT)]= 55\n",
    "df.iloc[152, df.columns.get_loc(const.LAT)]= 850\n",
    "df.iloc[450, df.columns.get_loc(const.LAT)]= 6969"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "outputs": [
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x7fa2ffa125b0>]"
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the original dataframe of snippet\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.plot(small_gulls[const.LAT], small_gulls[const.LONG])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "outputs": [
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x7fa2ff9b5c70>]"
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the manipulated dataframe snippet\n",
    "plt.plot(df[const.LAT], df[const.LONG])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Original DF length: 1970\n",
      "Outlier Filtered DF length: 1682\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/yjharanwala/Desktop/PTRAIL/ptrail/preprocessing/filters.py:762: UserWarning: If kinematic features have been generated on the dataframe, then make sure to generate them again as outlier detection drops the point from the dataframe and does not run the kinematic features again.\n",
      "  warnings.warn(\"If kinematic features have been generated on the dataframe, then make \"\n"
     ]
    },
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x7fa30d4062e0>]"
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Running the hampel filter and then plotting the dataframe\n",
    "small_filt_df = filters.hampel_outlier_detection(df, column_name=const.LAT)\n",
    "\n",
    "# Showing the different in lengths as outliers have been removed\n",
    "print(f\"Original DF length: {len(df)}\")\n",
    "print(f\"Outlier Filtered DF length: {len(small_filt_df)}\")\n",
    "\n",
    "plt.plot(small_filt_df[const.LAT], small_filt_df[const.LONG])"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "outputs": [],
   "source": [],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}